package club.xiaojiawei.strings;

/**
 * @author 肖嘉威
 * @version 1.0
 * @date 5/2/22 8:24 PM
 * @question 剑指 Offer 58 - II. 左旋转字符串
 * @description 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如，输入字符串"abcdefg"和数字2，该函数将返回左旋转两位得到的结果"cdefgab"。
 */
public class ReverseLeftWordsI58 {

    public static void main(String[] args) {
        String s = "lrloseumgh";
        String result = reverseLeftWords2(s, 6);
        System.out.println(result);
    }

    /**
     * 取余-对号入座
     * @param s
     * @param n
     * @return
     */
    public static String reverseLeftWords(String s, int n) {
        int length = s.length();
        char[] result = new char[length];
        for (int i = 0; i < length; i++) {
            result[(i - n + length) % length] = s.charAt(i);
        }
        return new String(result);
    }

    /**
     * 字符串切片
     * @param s
     * @param n
     * @return
     */
    public static String reverseLeftWords2(String s, int n) {
        return s.substring(n) + s.substring(0, n);
    }

    /**
     * 官方-字符串遍历拼接，取余
     * @param s
     * @param n
     * @return
     */
    public static String reverseLeftWords3(String s, int n) {
        StringBuilder res = new StringBuilder();
        for(int i = n; i < n + s.length(); i++)
            res.append(s.charAt(i % s.length()));
        return res.toString();
    }
}
